package com.by.log;

import com.by.log.entity.LogEntry;
import com.by.log.handler.LogStorage;

/**
 * 日志操作核心接口
 */
public interface Logger {
    // 基础日志方法
    void trace(String format, Object... args);
    void debug(String format, Object... args);
    void info(String format, Object... args);
    void warn(String format, Object... args);
    void error(String format, Object... args);
    void error(Throwable throwable, String format, Object... args);

    // 带上下文的日志方法（RPC场景）
    void info(LogEntry context, String format, Object... args);
    void error(LogEntry context, Throwable throwable, String format, Object... args);

    // 记录方法调用统计
    void recordMethodCall(boolean success, long responseTime);
    
    // 记录路由调用统计
    void recordRouteCall(String route, boolean success, long responseTime);
    
    // 记录维度调用统计
    void recordDimensionalCall(String dimension, String targetId, boolean success, long responseTime);
    
    // 分布式追踪相关方法
    /**
     * 记录分布式追踪信息
     * @param traceId 追踪ID
     * @param spanId 跨度ID
     * @param parentSpanId 父跨度ID
     * @param message 日志消息
     */
    void trace(String traceId, String spanId, String parentSpanId, String message);
    
    /**
     * 记录带有追踪信息的日志
     * @param level 日志级别
     * @param traceId 追踪ID
     * @param spanId 跨度ID
     * @param parentSpanId 父跨度ID
     * @param message 日志消息
     * @param args 参数
     */
    void logWithTrace(String level, String traceId, String spanId, String parentSpanId, String message, Object... args);
    
    void setLogStorage(LogStorage storage);
}